/*
 * Anillo.cpp
 *
 *  Created on: Mar 19, 2010
 *      Author: jgrande
 */

#include "Anillo.h"

namespace middleware {

namespace directorio {

Anillo::Anillo(list<Direccion> emisores, list<Direccion> receptores):
	emisores(emisores),
	creado(false) {
	MensajeNuevoAnillo msj;
	list<Direccion>::const_iterator it, itSucesor;
	MiddlewareCliente& mw = MiddlewareClienteSingleton::instance();

	msj.setPrimero((uint8_t)true);
	msj.setReceptores(receptores);

	itSucesor = emisores.begin();

	for(it=emisores.begin();it!=emisores.end();it++) {
		itSucesor++;
		if(itSucesor==emisores.end()) {
			itSucesor = emisores.begin();
		}
		msj.setSucesor(*itSucesor);
		logger << LogType::LOG_DEBUG_0 << msj.toString() << logger.endl;
		mw.send(msj, *it, middleware::common::OP_NUEVO_ANILLO);
		msj.setPrimero((uint8_t)false);
	}

	creado = true;
}

Anillo::~Anillo() {
	// TODO Auto-generated destructor stub
}

bool Anillo::agregarReceptor(Direccion receptor) {
	MiddlewareCliente& mw = MiddlewareClienteSingleton::instance();
	MensajeAgregarReceptor msj(receptor);

	list<Direccion>::iterator it;
	for(it=emisores.begin();it!=emisores.end();it++) {
		mw.send(msj, *it, middleware::common::OP_AGREGAR_RECEPTOR);
	}

	return true;
}

bool Anillo::quitarReceptor(Direccion receptor) {
	MiddlewareCliente& mw = MiddlewareClienteSingleton::instance();
	MensajeQuitarReceptor msj(receptor);

	list<Direccion>::iterator it;
	for(it=emisores.begin();it!=emisores.end();it++) {
		mw.send(msj, *it, middleware::common::OP_QUITAR_RECEPTOR);
	}

	return true;
}

}

}
